In [1]:
%pylab inline
import pandas as pd
import numpy as np


Populating the interactive namespace from numpy and matplotlib

In [2]:
subj = "pdxn-005"
inFile = subj + "/" + subj + ".csv"
df = pd.read_csv(inFile, header=5)

In [3]:
df


Out[3]:
SID PHASE COLOR CONDITION WORD FIXATIONON PRECUEON WORDON FIXATIONOFF PRECUEOFF WORDOFF RESPONSE EXPECTED ACCURACY RT
0 5 STUDY0 rbp NaN NaN 0.001934 -1.000000 -1.000000 2.201402 -1.000000 -1.000000 NONE NONE -1 -1.000
1 5 STUDY0 rbp NaN NaN 2.201909 -1.000000 -1.000000 4.401405 -1.000000 -1.000000 NONE NONE -1 -1.000
2 5 STUDY0 rbp NaN NaN 4.401861 -1.000000 -1.000000 6.601407 -1.000000 -1.000000 NONE NONE -1 -1.000
3 5 STUDY0 rbp NaN NaN 6.601915 -1.000000 -1.000000 8.801410 -1.000000 -1.000000 NONE NONE -1 -1.000
4 5 STUDY0 rbp NaN NaN 8.801903 -1.000000 -1.000000 11.001413 -1.000000 -1.000000 NONE NONE -1 -1.000
5 5 STUDY0 rbp Y porch 11.030224 11.280224 12.030224 11.280224 12.030224 14.530224 NONE NONE -1 -1.000
6 5 STUDY0 rbp Y victory 14.530834 14.780835 15.530834 14.780834 15.530834 18.030834 NONE NONE -1 -1.000
7 5 STUDY0 rbp P kingdom 18.031396 18.281397 19.031396 18.281396 19.031396 21.531396 NONE NONE -1 -1.000
8 5 STUDY0 rbp Y evening 21.531977 21.781977 22.531978 21.781977 22.531977 25.031977 NONE NONE -1 -1.000
9 5 STUDY0 rbp NaN NaN 25.032496 -1.000000 -1.000000 27.232021 -1.000000 -1.000000 NONE NONE -1 -1.000
10 5 STUDY0 rbp NaN NaN 27.232502 -1.000000 -1.000000 29.432024 -1.000000 -1.000000 NONE NONE -1 -1.000
11 5 STUDY0 rbp NaN NaN 29.432492 -1.000000 -1.000000 31.632028 -1.000000 -1.000000 NONE NONE -1 -1.000
12 5 STUDY0 rbp Y pebble 31.658683 31.908683 32.658683 31.908683 32.658683 35.158683 NONE NONE -1 -1.000
13 5 STUDY0 rbp NaN NaN 35.159158 -1.000000 -1.000000 37.358703 -1.000000 -1.000000 NONE NONE -1 -1.000
14 5 STUDY0 rbp P quarrel 37.388554 37.638554 38.388554 37.638554 38.388554 40.888554 NONE NONE -1 -1.000
15 5 STUDY0 rbp NaN NaN 40.889033 -1.000000 -1.000000 43.088587 -1.000000 -1.000000 NONE NONE -1 -1.000
16 5 STUDY0 rbp S education 43.113415 43.363415 44.113416 43.363415 44.113415 46.613415 NONE NONE -1 -1.000
17 5 STUDY0 rbp P travel 46.614030 46.864030 47.614031 46.864030 47.614030 50.114030 NONE NONE -1 -1.000
18 5 STUDY0 rbp P summer 50.114649 50.364650 51.114650 50.364649 51.114649 53.614649 NONE NONE -1 -1.000
19 5 STUDY0 rbp NaN NaN 53.615131 -1.000000 -1.000000 55.814674 -1.000000 -1.000000 NONE NONE -1 -1.000
20 5 STUDY0 rbp P author 55.846529 56.096529 56.846529 56.096529 56.846529 59.346529 NONE NONE -1 -1.000
21 5 STUDY0 rbp NaN NaN 59.347033 -1.000000 -1.000000 61.546562 -1.000000 -1.000000 NONE NONE -1 -1.000
22 5 STUDY0 rbp S pocket 61.577282 61.827282 62.577282 61.827282 62.577282 65.077282 NONE NONE -1 -1.000
23 5 STUDY0 rbp S shoulder 65.077850 65.327850 66.077850 65.327850 66.077850 68.577850 NONE NONE -1 -1.000
24 5 STUDY0 rbp NaN NaN 68.578336 -1.000000 -1.000000 70.777870 -1.000000 -1.000000 NONE NONE -1 -1.000
25 5 STUDY0 rbp Y branch 70.807261 71.057261 71.807262 71.057261 71.807261 74.307261 NONE NONE -1 -1.000
26 5 STUDY0 rbp NaN NaN 74.307743 -1.000000 -1.000000 76.507283 -1.000000 -1.000000 NONE NONE -1 -1.000
27 5 STUDY0 rbp S painting 76.533163 76.783163 77.533163 76.783163 77.533163 80.033163 NONE NONE -1 -1.000
28 5 STUDY0 rbp P minute 80.033727 80.283727 81.033728 80.283727 81.033727 83.533727 NONE NONE -1 -1.000
29 5 STUDY0 rbp S castle 83.534304 83.784304 84.534304 83.784304 84.534304 87.034304 NONE NONE -1 -1.000
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
340 5 TEST1 rbp Y speech 239.096316 -1.000000 240.110681 240.096316 -1.000000 243.096316 MISS 1 0 -1.000
341 5 TEST1 rbp FOIL message 243.096992 -1.000000 244.110836 244.096992 -1.000000 247.096992 MISS 0 0 -1.000
342 5 TEST1 rbp P address 247.097663 -1.000000 248.112779 248.097663 -1.000000 251.097663 MISS 1 0 -1.000
343 5 TEST1 rbp NaN NaN 251.098483 -1.000000 -1.000000 253.297887 -1.000000 -1.000000 NONE NONE -1 -1.000
344 5 TEST1 rbp NaN NaN 253.324878 -1.000000 -1.000000 255.497889 -1.000000 -1.000000 NONE NONE -1 -1.000
345 5 TEST1 rbp Y daughter 255.498354 -1.000000 256.510659 256.498354 -1.000000 259.498354 MISS 1 0 -1.000
346 5 TEST1 rbp NaN NaN 259.499112 -1.000000 -1.000000 261.698559 -1.000000 -1.000000 NONE NONE -1 -1.000
347 5 TEST1 rbp FOIL neighbor 261.699068 -1.000000 262.711154 262.699068 -1.000000 265.699068 y 0 0 0.740
348 5 TEST1 rbp Y guardian 265.728545 -1.000000 266.740079 266.728545 -1.000000 269.728545 MISS 1 0 -1.000
349 5 TEST1 rbp S century 269.729230 -1.000000 270.742730 270.729230 -1.000000 273.729230 MISS 1 0 -1.000
350 5 TEST1 rbp S castle 273.729889 -1.000000 274.740982 274.729889 -1.000000 277.729889 MISS 1 0 -1.000
351 5 TEST1 rbp NaN NaN 277.730655 -1.000000 -1.000000 279.930099 -1.000000 -1.000000 NONE NONE -1 -1.000
352 5 TEST1 rbp S island 279.930578 -1.000000 280.943262 280.930578 -1.000000 283.930578 y 1 1 0.988
353 5 TEST1 rbp Y market 283.959274 -1.000000 284.973028 284.959274 -1.000000 287.959274 MISS 1 0 -1.000
354 5 TEST1 rbp NaN NaN 287.960058 -1.000000 -1.000000 290.159483 -1.000000 -1.000000 NONE NONE -1 -1.000
355 5 TEST1 rbp NaN NaN 290.190324 -1.000000 -1.000000 292.359487 -1.000000 -1.000000 NONE NONE -1 -1.000
356 5 TEST1 rbp P theatre 292.359944 -1.000000 293.371065 293.359944 -1.000000 296.359944 MISS 1 0 -1.000
357 5 TEST1 rbp Y arrow 296.360612 -1.000000 297.378376 297.360612 -1.000000 300.360612 MISS 1 0 -1.000
358 5 TEST1 rbp Y victory 300.361298 -1.000000 301.374682 301.361298 -1.000000 304.361298 MISS 1 0 -1.000
359 5 TEST1 rbp NaN NaN 304.362056 -1.000000 -1.000000 306.561505 -1.000000 -1.000000 NONE NONE -1 -1.000
360 5 TEST1 rbp P thread 306.561968 -1.000000 307.580282 307.561968 -1.000000 310.561968 MISS 1 0 -1.000
361 5 TEST1 rbp NaN NaN 310.562764 -1.000000 -1.000000 312.762187 -1.000000 -1.000000 NONE NONE -1 -1.000
362 5 TEST1 rbp Y evening 312.762650 -1.000000 313.777762 313.762650 -1.000000 316.762650 MISS 1 0 -1.000
363 5 TEST1 rbp FOIL engine 316.763839 -1.000000 317.780355 317.763839 -1.000000 320.763839 MISS 0 0 -1.000
364 5 TEST1 rbp S valley 320.764489 -1.000000 321.777199 321.764489 -1.000000 324.764489 MISS 1 0 -1.000
365 5 TEST1 rbp P ticket 324.765150 -1.000000 325.778287 325.765150 -1.000000 328.765150 MISS 1 0 -1.000
366 5 TEST1 rbp NaN NaN 328.765912 -1.000000 -1.000000 330.965357 -1.000000 -1.000000 NONE NONE -1 -1.000
367 5 TEST1 rbp NaN NaN 330.994489 -1.000000 -1.000000 333.165360 -1.000000 -1.000000 NONE NONE -1 -1.000
368 5 TEST1 rbp S merchant 333.165830 -1.000000 334.180635 334.165830 -1.000000 337.165830 y 1 1 0.895
369 5 TEST1 rbp NaN NaN 337.191998 -1.000000 -1.000000 339.391444 -1.000000 -1.000000 NONE NONE -1 -1.000

370 rows × 15 columns


In [4]:
df['wordDuration'] = df['WORDOFF'] - df['WORDON']

Select only rows with stimulus words (so, where WORD != NaN)


In [5]:
validTrials = df[pd.notnull(df['WORD'])]
validTrials[0:5]


Out[5]:
SID PHASE COLOR CONDITION WORD FIXATIONON PRECUEON WORDON FIXATIONOFF PRECUEOFF WORDOFF RESPONSE EXPECTED ACCURACY RT wordDuration
5 5 STUDY0 rbp Y porch 11.030224 11.280224 12.030224 11.280224 12.030224 14.530224 NONE NONE -1 -1 2.500000
6 5 STUDY0 rbp Y victory 14.530834 14.780835 15.530834 14.780834 15.530834 18.030834 NONE NONE -1 -1 2.500000
7 5 STUDY0 rbp P kingdom 18.031396 18.281397 19.031396 18.281396 19.031396 21.531396 NONE NONE -1 -1 2.500000
8 5 STUDY0 rbp Y evening 21.531977 21.781977 22.531978 21.781977 22.531977 25.031977 NONE NONE -1 -1 2.499999
12 5 STUDY0 rbp Y pebble 31.658683 31.908683 32.658683 31.908683 32.658683 35.158683 NONE NONE -1 -1 2.500000

Sort by condition and generate output log files for FSL

Conditions are:

  • P (Produced)
  • S (Silent Viewing)
  • Y (MotorControl - say "Check" or "Yes")

Must break up by run ("Study phase")


In [6]:
fMRIruns = {'STUDY0', 'STUDY1', 'TEST0', 'TEST1'}
Conditions = {'P':'Produced', 'S':'SilentView', 'Y':'MotorControl', 'FOIL':'Foil'}
for run in fMRIruns:
    for key in Conditions:
        if (run == 'STUDY0' or run == 'STUDY1') and key == 'FOIL':
            pass
        else:
            dfTmp = df[df['CONDITION'].isin([key]) & df['PHASE'].isin([run])][['WORDON','wordDuration']]
            dfTmp['Col3'] = 1
            dfTmp.to_csv(inFile.split('.')[0] + '_fMRIlog_' + run + '_' + Conditions[key] + '.txt', sep='\t', header=False, index=False)

Pull out behavioural results


In [67]:
studyRuns = {'STUDY0', 'STUDY1'}
studyData = df[df['PHASE'].isin(studyRuns) & pd.notnull(df['WORD'])][:]
studyData['RESPONSE'] = studyData['WORD']  # hack so we can later use WORD as a key for filling in responses

testRuns = {'TEST0', 'TEST1'}
testData = df[df['PHASE'].isin(testRuns) & pd.notnull(df['WORD'])][['WORD','CONDITION','RESPONSE']]

In [66]:
# Make dict mapping words to their test phase responses
testResps = pd.Series(testData.RESPONSE.values,index=testData.WORD).to_dict()
# now replace values in Study phase w responses
studyData.replace({'RESPONSE':testResps}, inplace=True)
studyData


Out[66]:
SID PHASE COLOR CONDITION WORD FIXATIONON PRECUEON WORDON FIXATIONOFF PRECUEOFF WORDOFF RESPONSE EXPECTED ACCURACY RT wordDuration
5 5 STUDY0 rbp Y porch 11.030224 11.280224 12.030224 11.280224 12.030224 14.530224 MISS NONE -1 -1 2.500000
6 5 STUDY0 rbp Y victory 14.530834 14.780835 15.530834 14.780834 15.530834 18.030834 MISS NONE -1 -1 2.500000
7 5 STUDY0 rbp P kingdom 18.031396 18.281397 19.031396 18.281396 19.031396 21.531396 MISS NONE -1 -1 2.500000
8 5 STUDY0 rbp Y evening 21.531977 21.781977 22.531978 21.781977 22.531977 25.031977 MISS NONE -1 -1 2.499999
12 5 STUDY0 rbp Y pebble 31.658683 31.908683 32.658683 31.908683 32.658683 35.158683 MISS NONE -1 -1 2.500000
14 5 STUDY0 rbp P quarrel 37.388554 37.638554 38.388554 37.638554 38.388554 40.888554 MISS NONE -1 -1 2.500000
16 5 STUDY0 rbp S education 43.113415 43.363415 44.113416 43.363415 44.113415 46.613415 MISS NONE -1 -1 2.499999
17 5 STUDY0 rbp P travel 46.614030 46.864030 47.614031 46.864030 47.614030 50.114030 MISS NONE -1 -1 2.499999
18 5 STUDY0 rbp P summer 50.114649 50.364650 51.114650 50.364649 51.114649 53.614649 MISS NONE -1 -1 2.499999
20 5 STUDY0 rbp P author 55.846529 56.096529 56.846529 56.096529 56.846529 59.346529 y NONE -1 -1 2.500000
22 5 STUDY0 rbp S pocket 61.577282 61.827282 62.577282 61.827282 62.577282 65.077282 MISS NONE -1 -1 2.500000
23 5 STUDY0 rbp S shoulder 65.077850 65.327850 66.077850 65.327850 66.077850 68.577850 y NONE -1 -1 2.500000
25 5 STUDY0 rbp Y branch 70.807261 71.057261 71.807262 71.057261 71.807261 74.307261 MISS NONE -1 -1 2.499999
27 5 STUDY0 rbp S painting 76.533163 76.783163 77.533163 76.783163 77.533163 80.033163 MISS NONE -1 -1 2.500000
28 5 STUDY0 rbp P minute 80.033727 80.283727 81.033728 80.283727 81.033727 83.533727 y NONE -1 -1 2.499999
29 5 STUDY0 rbp S castle 83.534304 83.784304 84.534304 83.784304 84.534304 87.034304 MISS NONE -1 -1 2.500000
30 5 STUDY0 rbp Y uniform 87.035073 87.285073 88.035073 87.285073 88.035073 90.535073 MISS NONE -1 -1 2.500000
34 5 STUDY0 rbp Y capital 97.161033 97.411033 98.161033 97.411033 98.161033 100.661033 MISS NONE -1 -1 2.500000
35 5 STUDY0 rbp Y building 100.661615 100.911615 101.661615 100.911615 101.661615 104.161615 MISS NONE -1 -1 2.500000
36 5 STUDY0 rbp P wheat 104.162254 104.412254 105.162254 104.412254 105.162254 107.662254 MISS NONE -1 -1 2.500000
37 5 STUDY0 rbp Y foundation 107.662832 107.912832 108.662832 107.912832 108.662832 111.162832 MISS NONE -1 -1 2.500000
38 5 STUDY0 rbp S amount 111.163418 111.413418 112.163418 111.413418 112.163418 114.663418 MISS NONE -1 -1 2.500000
40 5 STUDY0 rbp Y campaign 116.897784 117.147784 117.897784 117.147784 117.897784 120.397784 MISS NONE -1 -1 2.500000
41 5 STUDY0 rbp S century 120.398374 120.648376 121.398374 120.648374 121.398374 123.898374 MISS NONE -1 -1 2.500000
44 5 STUDY0 rbp P theatre 128.331606 128.581607 129.331607 128.581606 129.331606 131.831606 MISS NONE -1 -1 2.499999
46 5 STUDY0 rbp P quarter 134.064747 134.314747 135.064747 134.314747 135.064747 137.564747 y NONE -1 -1 2.500000
48 5 STUDY0 rbp P language 139.796961 140.046961 140.796961 140.046961 140.796961 143.296961 MISS NONE -1 -1 2.500000
52 5 STUDY0 rbp S furniture 149.926325 150.176325 150.926325 150.176325 150.926325 153.426325 y NONE -1 -1 2.500000
53 5 STUDY0 rbp S knock 153.426918 153.676918 154.426918 153.676918 154.426918 156.926918 MISS NONE -1 -1 2.500000
55 5 STUDY0 rbp S merchant 159.156566 159.406566 160.156567 159.406566 160.156566 162.656566 y NONE -1 -1 2.499999
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
108 5 STUDY1 rbp Y guardian 81.286031 81.536031 82.286031 81.536031 82.286031 84.786031 MISS NONE -1 -1 2.500000
112 5 STUDY1 rbp S meadow 91.417174 91.667174 92.417174 91.667174 92.417174 94.917174 y NONE -1 -1 2.500000
113 5 STUDY1 rbp S valley 94.917763 95.167764 95.917763 95.167763 95.917763 98.417763 MISS NONE -1 -1 2.500000
114 5 STUDY1 rbp P department 98.418325 98.668325 99.418325 98.668325 99.418325 101.918325 MISS NONE -1 -1 2.500000
116 5 STUDY1 rbp S resort 104.147729 104.397729 105.147729 104.397729 105.147729 107.647729 MISS NONE -1 -1 2.500000
117 5 STUDY1 rbp P garden 107.648624 107.898624 108.648624 107.898624 108.648624 111.148624 y NONE -1 -1 2.500000
119 5 STUDY1 rbp P nephew 113.375682 113.625683 114.375682 113.625682 114.375682 116.875682 MISS NONE -1 -1 2.500000
120 5 STUDY1 rbp P invitation 116.876275 117.126275 117.876275 117.126275 117.876275 120.376275 y NONE -1 -1 2.500000
121 5 STUDY1 rbp S afternoon 120.376857 120.626857 121.376857 120.626857 121.376857 123.876857 MISS NONE -1 -1 2.500000
125 5 STUDY1 rbp Y steam 130.507450 130.757450 131.507450 130.757450 131.507450 134.007450 y NONE -1 -1 2.500000
126 5 STUDY1 rbp Y envelope 134.008340 134.258340 135.008340 134.258340 135.008340 137.508340 MISS NONE -1 -1 2.500000
128 5 STUDY1 rbp P village 139.737010 139.987010 140.737010 139.987010 140.737010 143.237010 MISS NONE -1 -1 2.500000
129 5 STUDY1 rbp S package 143.237599 143.487599 144.237599 143.487599 144.237599 146.737599 MISS NONE -1 -1 2.500000
131 5 STUDY1 rbp S traffic 148.966903 149.216903 149.966903 149.216903 149.966903 152.466903 MISS NONE -1 -1 2.500000
132 5 STUDY1 rbp Y school 152.467496 152.717497 153.467496 152.717496 153.467496 155.967496 y NONE -1 -1 2.500000
133 5 STUDY1 rbp P justice 155.968171 156.218171 156.968171 156.218171 156.968171 159.468171 MISS NONE -1 -1 2.500000
135 5 STUDY1 rbp Y stream 161.698193 161.948194 162.698194 161.948193 162.698193 165.198193 y NONE -1 -1 2.499999
136 5 STUDY1 rbp S kettle 165.198750 165.448750 166.198750 165.448750 166.198750 168.698750 y NONE -1 -1 2.500000
138 5 STUDY1 rbp Y peace 170.929900 171.179900 171.929901 171.179900 171.929900 174.429900 y NONE -1 -1 2.499999
139 5 STUDY1 rbp S plate 174.430461 174.680462 175.430461 174.680461 175.430461 177.930461 y NONE -1 -1 2.500000
141 5 STUDY1 rbp S account 180.161215 180.411215 181.161216 180.411215 181.161215 183.661215 MISS NONE -1 -1 2.499999
143 5 STUDY1 rbp S station 185.893176 186.143176 186.893176 186.143176 186.893176 189.393176 MISS NONE -1 -1 2.500000
146 5 STUDY1 rbp Y speech 193.823214 194.073214 194.823214 194.073214 194.823214 197.323214 MISS NONE -1 -1 2.500000
148 5 STUDY1 rbp Y beauty 199.561345 199.811345 200.561345 199.811345 200.561345 203.061345 MISS NONE -1 -1 2.500000
151 5 STUDY1 rbp P avenue 207.490480 207.740480 208.490481 207.740480 208.490480 210.990480 y NONE -1 -1 2.499999
152 5 STUDY1 rbp Y reward 210.991048 211.241048 211.991048 211.241048 211.991048 214.491048 MISS NONE -1 -1 2.500000
153 5 STUDY1 rbp P address 214.491620 214.741620 215.491620 214.741620 215.491620 217.991620 MISS NONE -1 -1 2.500000
155 5 STUDY1 rbp P battery 220.220875 220.470875 221.220875 220.470875 221.220875 223.720875 b NONE -1 -1 2.500000
156 5 STUDY1 rbp P journey 223.721465 223.971465 224.721466 223.971465 224.721465 227.221465 y NONE -1 -1 2.499999
159 5 STUDY1 rbp Y daughter 231.656546 231.906546 232.656546 231.906546 232.656546 235.156546 MISS NONE -1 -1 2.500000

90 rows × 16 columns

Write out additional FSL log files that are response-conditioned

This needs to wait until I know what the response keys mean

  • Red = don't remember
  • Blue = know
  • Yellow = recollect

In [ ]:
for run in fMRIruns:
    for key in Conditions:
        if (run == 'STUDY0' or run == 'STUDY1') and key == 'FOIL':
            pass
        else:
            dfTmp = df[df['CONDITION'].isin([key]) & df['PHASE'].isin([run])][['WORDON','wordDuration']]
            dfTmp['Col3'] = 1
            dfTmp.to_csv(inFile.split('.')[0] + '_fMRIlog_' + run + '_' + Conditions[key] + '.txt', sep='\t', header=False, index=False)